por Antonio Gallego, autor del libro "Enrutadores Cisco".
NAT. PRESENTACION
NAT (Network Address Translator) es una
función de los enrutadores que representa una respuesta a
algunos problemas que presenta Internet (escasez de direcciones, problemas de
seguridad y
complejidad del encaminamiento o routing), derivados de los peculiares origenes
de la Red.
En este artículo abordaremos en una primera parte las razones que hicieron
necesario el
desarrollo del mecanismo NAT para terminar mostrando como se usa en redes
basadas en tecnología
Cisco.
I. NAT. PRINCIPALES MOTIVACIONES.
I.a.- REMEDIO FRENTE A LA ESCASEZ DE DIRECCIONES
Las máquinas que se conectan a Internet se identifican por medio de un
número (denominado
dirección IP, de Internet Protocol). Aunque las direcciones IP tienen una
longitud de 32 bits (lo
que permite en principio identificar hasta 4,294,967,296 máquinas distintas) la
forma de repartir
esas direcciones agrupándolas en redes de distintas clases, la generosidad
inicial en el reparto
así como el éxito comercial e imprevisto de Internet ha provocado un progresivo agotamiento
del espacio de
direcciones disponible.
Cuando Internet fue diseñado no se pensó que pudiera crecer de una forma tan
explosiva (el uso
previsto era militar y científico, y no comercial). El
abaratamiento de
los sistemas informáticos y de las telecomunicaciones así como la simplificación
de su uso ha
terminado acercando la red Internet a un gran público, y los proveedores de
servicios de red han
tenido que desarrollar mecanismos para responder a la demanda creada.
La solución obvia, aumentar la longitud de las direcciones, ya se está llevando
a cabo: está en marcha la implantación de la versión 6 del protocolo IP (IPv6) que utiliza
direcciones de 128
bits. Esta versión también ha previsto mecanismos más racionales de reparto del
nuevo espacio de
direcciones. No obstante llevará años migrar la infraestructura actual de Internet a IPv6.
Mientras tanto NAT (Network Address Translator) ha representado una magnífica
solución temporal
al problema de agotamiento de las direcciones, al permitir que múltiples
usuarios se conecten a
la red compatiendo una única dirección IP. Esta dirección en muchos casos es
además 'dinámica',
esto es, se trata de una dirección que forma parte de un conjunto (pool) más
amplio propiedad del
ISP (Internet Service Provider, o Proveedor de Servicios de Internet), que es
'alquilada' temporalmente al usuario, permitiendo una reutilización de este preciado recurso
tan pronto como
es liberado.
Como los sistemas de los usuarios finales siguen necesitando tener una dirección
única que los
identifique pueden usar en sus redes locales direcciones denominadas de uso
privado descritas en
el RFC 1918 (Address Allocation for Private Internets), que especifica que las
redes 10.0.0.0 -
10.255.255.255, 172.16.0.0 - 172.31.255.255 y 192.168.0.0 - 192.168.255.255 no
son encaminadas
por los routers en la Red, de forma que pueden ser usadas sin conflicto por
múltiples usuarios en
distintos sitios. A la hora de salir a Internet el router NAT se encargará de
hacer las traducciones necesarias para que los 'diálogos' con el exterior de las máquinas
con direcciones
RFC 1918 parezcan tener por origen la IP asignada por el ISP (de espacio
público, enrutable). De
cara al exterior la red del usuario se presenta como una única máquina.
I.b.- SIMPLIFICACIÓN DE LA GESTION DE REDES
Otra consecuencia derivada del crecimiento de Internet es el aumento del
tamaño de las tablas de
rutas necesarias para el encaminamiento (routing) de los paquetes en la Red.
Para que los
paquetes viajen hasta las máquinas destino los enrutadores deben poseer rutas
hacia los destinos.
Algunos de los enrutadores del núcleo de Internet poseen tablas de rutas de
enorme tamaño. El uso
de NAT ha frenado el crecimiento de estas tablas.
Al hablar de la administración de redes hay que mencionar una importante ventaja
de NAT, al
permitir migrar redes de forma transparente a los usuarios finales. Esto es
especialmente útil
cuando hay que unir dos redes que comparten el mismo plan de numeración (redes
superpuestas u
"overlaping networks"). El uso de redes de espacio RFC 1918 hace que estos
solapamientos ocurran
de forma frecuente en las fusiones de empresas.
I.c.- MEJORA DE LA SEGURIDAD
Internet presenta una serie de problemas de seguridad que han sido estudiados
en diversas
ocasiones (cómo en "Security problems in the TCP/IP protocol suite", Bellovin).
Estos problemas
pueden sorprender si consideramos que los orígenes de Internet son claramente
militares (la red
ARPA), pero se explican teniendo en cuenta el carácter experimental de sus
inicios, el énfasis en
la funcinalidad por encima de otros criterios, el entorno académico donde se
desarrollaron los protocolos fundamentales que componen la pila de protocolos TCP/IP, etc... Tampoco los principales sistemas operativos han sido desarrollados teniendo la seguridad como principal criterio de diseño.
Hemos visto en el apartado anterior como por medio de NAT y el uso de
direcciones de uso privado
la red del usuario se presenta de cara al exterior como una única máquina. Al
hacer pasar las
comunicaciones por un punto común (el router NAT) se puede concentrar una parte
importante del
esfuerzo de seguridad en dicho punto. Desde el exterior no será posible
establecer comunicación
con máquinas de la red local si estas no han iniciado la conversación (el router
NAT no sabría a
qué máquina interna remitir los paquetes del exterior). Por supuesto que es
posible definir
traducciones estáticas para ciertos servicios que necesitan ser identificados
con claridad, tales
como servicios Web, FTP, etc... No obstante la combinación de NAT con mecanismos
de seguridad
tales como listas de acceso permiten ejercer un mayor control en el uso de estos
servicios.
Hay que tener en cuenta que el origen de NAT está en la escasez de direcciones
IPv4 y no en la
seguridad. Recientes avances ("Counting NATed Host", Bellovin) muestran técnicas
que permiten
identificar las máquinas que están detrás de un router NAT.
II. CONFIGURACION DE NAT EN ENTORNOS CISCO
II.a.- DIRECCIONES NAT
A la hora de configurar la traducción de direcciones Cisco distingue cuatro
tipos de direcciones:
Inside local address (interna local): la dirección IP asiganada a una máquina
concreta de la red
interna. Generalmente se trata de una dirección de espacio reservado para uso
privado (RFC 1597).
Inside global address (interna global): la dirección IP que representa en el
exterior una o más
direcciones internas locales (inside local address). Suelen ser direcciones IP
públicas
(enrutables) asignadas por un ISP.
Outside local address (externa local): la dirección IP de una máquina externa
tal como se ve
desde la red interna. No tiene por que ser una dirección IP pública, 'legal'.
Outside global address (externa global): la dirección IP de una máquina externa
tal como es
asignada por el dueño de dicha máquina. Esta IP es de espacio público.
Para eliminar ambigüedad definiremos las redes internas como aquellas conectadas
a las interfaces
del router NAT definidas como "inside" (por medio de la órden "ip nat inside").
De forma similar
denominaremos redes externas a las que conectan con el router NAT por las
interfaces definidas
como "outside" (por medio de la órden "ip nat outside"). En función de a qué
interfaces se
conectan, las redes serán internas o externas a efectos del NAT.
II.b.- FUNCIONAMIENTO DE NAT
Los paquetes originados en la parte interna de la red tienen una "inside
local address" como
origen y una "outside local address" como destino mientras el paquete viaja por
la parte interna
de la red. Cuando el paquete es conmutado a la red externa el origen del paquete
es traducido a
la "inside global address" y el destino conocido como "outside global address".
Otra forma de verlo: cuando el paquete viene de la parte externa de la red su
dirección origen
será la "outside global address" y el destino será la "inside global address".
Pero cuando el
paquete atraviese el router NAT y entre en la red interna el origen habrá sido
traducido por la
"outside local address" y su destino como "inside local address."
El encaminamiento (routing) de los paquetes en un router NAT tiene lugar antes
de la traducción
cuando esta es de dentro a fuera (Inside-to-outside) y tiene lugar después
cuando la traducción
es de fuera a dentro (Outside-to-inside).
II.c.- NAT ESTATICO
II.c.1.- NAT INSIDE SOURCE
En este tipo de NAT un paquete con origen ip_local al atravesar una interfaz
definida como inside
cambiará dicha ip origen por la ip_global. Igualmente, y para que todo funcione
correctamente,
cuando un paquete con destino ip_global llegue a una interfaz definida como
outside será cambiado
a destino ip_local.
La forma general de la instrucción que permite definir este mapeo es
ip nat inside source static ip_local ip_global
En el ejemplo siguiente las máquinas 10.0.0.1 a 10.0.0.4 conectadas a la red
local (ethernet)
serán vistas desde el exterior (por la interfaz serie) cómo 9.0.0.1 a 9.0.0.4
ip nat inside source static 10.0.0.1 9.0.0.1
ip nat inside source static 10.0.0.2 9.0.0.2
ip nat inside source static 10.0.0.3 9.0.0.3
ip nat inside source static 10.0.0.4 9.0.0.4
interface ethernet 0
ip nat inside
interface serial 0
ip nat outside
Podemos consultar el estado de la tabla NAT por medio de la instrucción "show ip
nat translation"
Sagan#sh ip nat trans
Pro Inside global Inside local Outside local Outside global
--- 9.0.0.1 10.0.0.1 --- ---
--- 9.0.0.2 10.0.0.2 --- ---
--- 9.0.0.3 10.0.0.3 --- ---
--- 9.0.0.4 10.0.0.4 --- ---
II.c.2.- NAT OUTSIDE SOURCE
En este caso cuando el router recibe un paquete con origen ip_global en su
interfaz outside dicha
dirección es cambiada por la ip_local. De la misma forma, cuando un paquete con
destino ip_local
atraviesa una interfaz definida como inside será trasformado para que su destino
sea la ip_global
La forma general de la instrucción que permite definir este mapeo es
ip nat outside source static ip_global ip_local
En el siguiente ejemplo el dispositivo 9.0.0.4 es conocido en la red local local
como 10.0.0.4
ip nat outside source static 9.0.0.4 10.0.0.4
interface serial 0
ip nat outside
interface ethernet 0
ip nat inside
Podemos comprobar la traducción con
Sagan#sh ip nat trans
Pro Inside global Inside local Outside local Outside global
--- --- --- 10.0.0.4 9.0.0.4
II.c.3 RESUMEN DEL NAT ESTATICO
Una forma simplificada de considerar los puntos anteriores en la práctica
consiste en estudiar las
instrucciones de traducción "ip nat inside|outside source|destination static"
inside|outside hace referencia a que interfaz debe atravesar el paquete (de qué
red viene).
source|destination hace referencia al campo del paquete que será traducido
(nuevo origen|destino)
Así:
"ip nat inside source" cambia el origen de los paquetes (que cumplen el NAT,
ojo, que para el
resto el NAT es trasparente) que vienen por la interfaz inside (y el destino de
los que entran
por la interfaz outside y cumplen el NAT)
"ip nat inside destination" cambia el destino de los paquetes (que cumplen el
NAT) que vienen por
la interfaz inside (y el origen de los que entran por la interfaz outside y
cumplen el NAT)
"ip nat outside source" cambia el origen de los paquetes que vienen por la interfaz definida como outside (y cumplen el NAT).
II.d.- NAT DINAMICO (muy provisional)
II.d.1 Configuración
Para empezar creamos un “fondo” (pool) de direcciones. Usamos listas de
acceso para especificar
las direcciones internas y la orden “ip nat pool” seguida del nombre del "pool"
para enumerar el
rango de direcciones externas:
access-list 10 permit 10.0.0.0 0.255.255.255
ip nat pool CONVERSION 9.0.0.2 9.0.0.5 netmask 255.0.0.0
Conectamos ambos dominios de direcciones con la orden “ip nat inside|outside
source|destination”,
pero en esta ocasión especificaremos que utilice el "pool" definido
anteriomente:
ip nat inside source list 10 pool CONVERSION
Aplicamos la conversión como antes:
interface Ethernet0
ip nat inside
!
interface Serial0
ip nat outside
II.d.2 Sobrecarga (Overload)
Se configura de forma similar pero añadiendo la palabra clave "overload"
ip nat inside source list 10 pool CONVERSION overload
Podemos hacer que el enrutador reconstruya la tabla de traducciones con la orden
“clear ip nat
translation *”. Limpiar la tabla NAT es una buena medida inicial cuando se
reportan problemas con
este mecanismo.
Por medio de la instrucción “sh ip nat statistics” podemos examinar las
estadísticas el
funcionamiento de NAT: aciertos (hits), fallos (missess), traducciones expiradas
(expired)...
Sagan#sh ip nat statistics
Total active translations: 4 (0 static, 4 dynamic; 0 extended)
Outside interfaces: Serial0
Inside interfaces: Ethernet0
Hits: 20 Misses: 0
Expired translations: 0
Dynamic mappings:
-- Inside Source
access-list 10 pool CONVERSION refcount 2
pool CONVERSION: netmask 255.0.0.0
start 10.20.5.2 end 10.20.5.5
type generic, total addresses 4, allocated 4 (100%), misses 0
II.d.3.- NAT INSIDE DESTINATION (provisional)
En este caso cuando el router recibe un paquete con destino ip_global en su interfaz inside dicha dirección es cambiada por la ip_local. De la misma forma, cuando un paquete con origen ip_global atraviesa una interfaz definida como outside será trasformado para que su origen sea la ip_local.
La forma general de la instrucción que permite definir este mapeo es
ip nat inside destination list access-list-number pool name
REFERENCIAS
La descripción original de NAT fué hecha en mayo de 1994 el RFC 1631 "The IP
Network Address
Translator (NAT)". Una revisión actualizada de este documento aparece en el RFC
3022 "Traditional
IP Network Address Translator (Traditional NAT)"
El protocolo IPv6 (también conocido como IPng, de Next Generation) está descrito
en el RFC 1883
"Internet Protocol, Version 6 (IPv6)"
Las direcciones reservadas por IANA para uso privado fueron definidas en el RFC
1918 "Address
Allocation for Private Internets".
Los problemas de seguridad de TCP/IP han sido estudiados en muchas ocaciones. Un
clásico es
"Security problems in the TCP/IP protocol suite", S. M. Bellovin, AT&T Labs
Research.
La técnica de conteo de máquinas detrás de un router NAT ha sido desarrollada en
"Counting NATed
Hosts", S. M. Bellovin, AT&T Labs Research, 2003
RESUMEN
El mecanismo conocido como NAT (Network Address Translator) permite atajar
tres importantes
problemas de Internet: la progresiva escasez de direcciones, los problemas de
seguridad derivados
del uso comercial y la complejidad de gestión del encaminamiento (routing).
Hemos visto como
estos problemas derivan de los peculiares orígenes de la Red, y como NAT
representa una
magnífica solución a corto plazo mientras se migra la red al nuevo (y mucho más
extenso) espacio
de direciones IPv6.
NAT permite la “sobrecarga” (overload) de direcciones internas, permitiendo que
muchas máquinas
internas compartan unas pocas direcciones públicas, quizás sólo una. NAT permite
unir dos redes
sin tener que cambiar el direccionamiento de la red entera. Esto puede resultar
necesario al unir
dos redes con numeraciones solapadas (overlaping).